clc
clear all
%% 放电模拟测试
Q0 = 3000*60*60;%电池容量ma*秒
SOC0 = 1;
I_sum = 0;%释放的总电流
Eta = 1;%库伦效率，假设电池已循环次数很少
I = 50000;%放电电流，单位MA
delta_t = 1;%一秒采样一次
T = 1;%放电时间：分钟
for t = 1:T*60 %放电间隔1秒统计
    I_sum = I_sum+Eta*I*delta_t;
end
SOCr = I_sum/Q0;
SOCt = SOC0-SOCr;
%% 测试最小二乘法的效果
% for i=1:500;
%     y(i,1) = 3*i+4*i*i;
%     x(i,1) = i;
% end
% p=LSM(x,y);
%% 用最小二乘法拟合22年暑期3Ah电池的放电WV-SOC曲线
filename = '.\22年暑期测试端电压.txt';
WV_3000=textread(filename,'%n');
filename = '.\22年暑期测试电流释放值.txt';
Isum_3000=textread(filename,'%n');
Isum_3000 = flipud(Isum_3000);%SOC与释放总电流成反比，将Isum_420反序
SOC_3000 = Isum_3000./3;%放电总电流归一化为SOC值
PL=LSM(WV_3000,SOC_3000);%拟合的二次多项式系数
wv = 2;                                                                         
S = PL(1)+PL(2)*wv+ PL(3)*wv.^2;%测试发现拟合的函数比较接近实际数据
%% 用最小二乘法拟合420mAh电池的放电WV-SOC曲线(冬季测试，固定放电电流300ma)
content= importdata('420mAh电池电压及电流释放数据.txt', ' ', 2);
WV_420 = content.data(:,1)/1000;%单位：V
Isum_ma = content.data(:,2);
Isum_420 = Isum_ma/3600/1000;%容量取安时
Isum_420 = flipud(Isum_420);
Isum_420 = roundn(Isum_420,-3);%只取三位
WV_420 = roundn(WV_420,-3);
SOC_420 = Isum_420./Isum_420(1);%放电总电流归一化为SOC值
PS=LSM(WV_420,SOC_420);%拟合的二次多项式系数
wv = 2.7;                                                                         
SOC_WV = PS(1)+PS(2)*wv+ PS(3)*wv.^2;%拟合二次项
% SOC_WV = PS(1)+PS(2)*wv+ PS(3)*wv.^2 + PS(4)*wv.^3;%拟合三次项
Isum_WV = (1-SOC_WV)*Isum_ma(length(Isum_ma));%对应wv电压释放的总电流
%% 用最小二乘法拟合420mAh电池的放电OCV-SOC曲线(冬季测试)
%欧姆内阻和极化内阻在电池放电过程中会不断增大，限于实验设备，无法准确测量，因此只取固定值
%欧姆内阻R0=3~4Ω，取3Ω，忽略极化内阻
R0 = 3;
OCV_420 = WV_420+R0*0.3;%加上内阻的电压
PC=LSM(OCV_420,SOC_420);%拟合OCV-SOC的二次多项式系数
ocv = wv+R0*0.3;                                                                         
SOC_OCV = PC(1)+PC(2)*ocv+ PC(3)*ocv.^2;
Isum_OCV = (1-SOC_OCV)*Isum_420(1)*3600;%对应wv电压释放的总电流
